/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package control;

import javax.ejb.EJB;
import javax.ejb.Stateful;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;
import javax.swing.JOptionPane;
import model.Cliente;
import model.Conta;

/**
 *
 * @author fabio
 */
@Stateful(mappedName="BancoBean")
public class BancoBean implements BancoBeanRemote {
    
    private Conta conta;
    
    @EJB(lookup="Operadora") OperadoraRemote oper;
    
    @PersistenceContext(unitName="ModuloBancarioPU")
    private EntityManager em;

    @Override
    public void criarConta(Cliente c, String numero, double saldo) {
        if (localizarConta(numero)== null){
            Conta con = new Conta(c, numero, saldo);
            c.setConta(con);
            em.persist(c);
            em.persist(con);
        }else{
            System.out.println("Número de conta já existe");
        }
        
    }

    @Override
    public Conta localizarConta(String numero) {
        try{
            Query q = em.createQuery("select c from Conta c where c.numero_conta = :n");
            q.setParameter("n", numero);
            conta = (Conta)q.getSingleResult(); 
            return conta;
        }catch(Exception e){
            return null;
        }
    }

    @Override
    public boolean sacar(String numer, double valor) {
        Conta c = localizarConta(numer);
        if ((c.getSaldo()-valor) >= 0){
            c.setSaldo(c.getSaldo()-valor);
            em.merge(c);
            return true;
        } else
            return false;
    }

    @Override
    public void depositar(String numero, double valor) {
        Conta c = localizarConta(numero);
        c.setSaldo(c.getSaldo()+valor);
        em.merge(c);
    }

    @Override
    public int insereCreditosCelular(String numeroTel, String cpf, double valor) {
        if (oper.localizarNumero(numeroTel, cpf) != null){
            boolean retorno = sacar(conta.getNumero_conta(), valor);
            if(!retorno){
                System.out.println("Saldo insuficiente");
                return 2;
            } else{
                oper.inserirCredito(numeroTel, cpf, valor);
                return 0;
            }
        } else{
            return 1;
        }
    }

    // Add business logic below. (Right-click in editor and choose
    // "Insert Code > Add Business Method")

    @Override
    public Conta getConta() {
        return conta;
    }
    
}
